﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;



namespace Kuvankatselin.Objekti
{
    /// <summary>
    /// Objekti-luokka huolehtii kuvien ja videoiden liikuttamisesta ruudulla
    /// </summary>
    public class Objekti : Grid 
    {
        /// <summary>
        /// Onko objekti esikatsleunäkymässä vai ei
        /// </summary>
        protected bool esikatselu;
        /// <summary>
        /// Suurin sallittu esityskoko
        /// </summary>
        public static int SuurinLeveys = 1920;
        /// <summary>
        /// Suurin sallittu esityskoko
        /// </summary>
        public static int SuurinKorkeus = 1080;
        /// <summary>
        /// Esikatselukooon objektin korkeus
        /// </summary>
        public static int EsikatseluKorkeus = 120;

        /// <summary>
        /// Kertoo onko objekti valittu vai ei
        /// </summary>
        private bool valittu;

        /// <summary>
        /// Hiiren X sijainti ennen kuvan liikuttamista kuvassa
        /// </summary>
        private int hiiriSijaintiX;
        /// <summary>
        /// Hiiren Y sijainti ennen kuvan liikuttamista kuvassa
        /// </summary>
        private int hiiriSijaintiY;
        /// <summary>
        /// Objektin sisältämän median tiedosto
        /// </summary>
        protected string tiedosto;


        public Objekti()
        {
            this.valittu = false;
            this.esikatselu = false;

            this.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(Objekti_MouseLeftButtonDown);
            this.MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(Objekti_MouseLeftButtonUp);

            this.MouseMove += new System.Windows.Input.MouseEventHandler(Objekti_MouseMove);
        }

        /// <summary>
        /// Käsitellään hiiren liikkumisen tapahtumat
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Objekti_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {

            // Jos valittu niin siiretään objektia
            if (valittu)
            {
                // Laitetaan objektin sijainti oikeaksi
                Canvas.SetTop(this, Mouse.GetPosition((Canvas)this.Parent).Y - hiiriSijaintiY);
                Canvas.SetLeft(this, Mouse.GetPosition((Canvas)this.Parent).X - hiiriSijaintiX);
            }
        }
        /// <summary>
        /// Käsitellään vasemman hiiren painikkeen ylösnoston tapahtuma
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Objekti_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            this.valittu = false;

            // Vapautetaan hiiri
            this.ReleaseMouseCapture();
        }

        /// <summary>
        /// Käsitellään vasemman hiiren painikkeen alaspainamisen tapahtuma
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void Objekti_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {

            hiiriSijaintiX = (int)(Mouse.GetPosition(this).X);
            hiiriSijaintiY = (int)(Mouse.GetPosition(this).Y);

            // Kaapataan hiiri
            this.CaptureMouse();

            // Laitetaan objekti valituksi
            this.valittu = true;

        }


    }
}
